#ifndef CAMERA_H
#define CAMERA_H

#include <stdbool.h>

// 相机模块错误码
#define CAMERA_SUCCESS      0
#define CAMERA_ERROR_INIT   -1
#define CAMERA_ERROR_CAPTURE -2
#define CAMERA_ERROR_CONFIG -3

// 照片格式
enum camera_image_format {
    CAMERA_FORMAT_JPEG,
    CAMERA_FORMAT_PNG,
    CAMERA_FORMAT_RAW
};

// 相机参数配置结构体
typedef struct {
    int resolution_width;
    int resolution_height;
    enum camera_image_format format;
    int quality; // 1-100
    char save_path[128];
} camera_config_t;

// 曝光模式
enum camera_exposure_mode {
    CAMERA_EXPOSURE_AUTO,
    CAMERA_EXPOSURE_MANUAL,
    CAMERA_EXPOSURE_APERTURE_PRIORITY,
    CAMERA_EXPOSURE_SHUTTER_PRIORITY
};

// 白平衡模式
enum camera_white_balance {
    CAMERA_WB_AUTO,
    CAMERA_WB_DAYLIGHT,
    CAMERA_WB_CLOUDY,
    CAMERA_WB_TUNGSTEN,
    CAMERA_WB_FLUORESCENT,
    CAMERA_WB_MANUAL
};

/**
 * @brief 初始化相机模块
 * @return 成功返回CAMERA_SUCCESS，失败返回错误码
 */
int camera_init(void);

/**
 * @brief 清理相机模块资源
 */
void camera_cleanup(void);

/**
 * @brief 拍摄照片
 * @param config 相机配置参数
 * @param filename 输出文件名（如果为NULL，则自动生成）
 * @return 成功返回CAMERA_SUCCESS，失败返回错误码
 */
int camera_capture_photo(camera_config_t *config, char *filename);

/**
 * @brief 设置相机参数
 * @param config 相机配置参数
 * @return 成功返回CAMERA_SUCCESS，失败返回错误码
 */
int camera_set_config(camera_config_t *config);

/**
 * @brief 设置曝光模式
 * @param mode 曝光模式
 * @param value 曝光值（手动模式下使用）
 * @return 成功返回CAMERA_SUCCESS，失败返回错误码
 */
int camera_set_exposure_mode(enum camera_exposure_mode mode, float value);

/**
 * @brief 设置白平衡
 * @param wb 白平衡模式
 * @return 成功返回CAMERA_SUCCESS，失败返回错误码
 */
int camera_set_white_balance(enum camera_white_balance wb);

/**
 * @brief 获取当前相机状态
 * @return 相机是否可用
 */
bool camera_is_available(void);

#endif /* CAMERA_H */